package com.yanxu.stopthreads.producerandconsumer;

/**
 * @author 折戟沉沙铁未销
 * @version V1.0
 *  使用 Volatile 修饰Boolean 类型的标志位 控制线程的停止。
 *  使用这种方式在有些情况下是可以的，但是有些情况是不可以的。
 *  所以，使用这种方式并不是一个通用的解决方案。
 *
 *  下面演示可以用的情况
 */
public class VolatileBooleanStop_CanUse {

    //定义一个标志位，并使用 [volatile] 进行修饰
    public static volatile Boolean stopFlag = false;

    public static void main(String[] args) throws InterruptedException {
        //定义子线程
        Thread myThread = new Thread(new Runnable() {
            public void run() {
                int num = 0;
                while (num < Integer.MAX_VALUE && !stopFlag) {
                    if (num % 100 == 0) {
                        System.out.println(num + "是 100 的倍数");
                    }
                    num++;
                }
                System.out.println("子线程结束了!!!");
            }
        });

        //启动子线程
        myThread.start();
        //主线程休眠2000 毫秒
        Thread.sleep(2000);
        stopFlag = true;
    }
}